/*获取收货地址
    绑定点击事件
    调用小程序内置的API 获取用户收货地址 wx.chooseAddress
    获取用户对小程序所授予的关于权限状态
  页面加载完毕
    onLoad onShow
    获取本地存储的地址数据
    把数据设置给data的一个变量
  onshow
    把获取缓存的购物车数据 填充到data
  全选的实现 数据的展示
    onshow 获取购物车数据
    根据数据 所有的商品都被选中 checked=TRUE
  总价格和总数量
    都需要商品被选中才能计算
    获取购物车数组
    遍历
    判断商品是否选中
    总价格 += 商品的单价*商品的数量
    总数量 += 商品的数量
    把计算后的价格和数量设置返回data中
  商品的选中
    绑定change时间
    获取被修改的商品对象
    商品对象的选中状态取反
    重新填充data和缓存
    重新计算全选、总价格、总数量
*/

import {getSetting,chooseAddress,openSetting,showModal,showToast} from "../../utils/asyncWx.js";

Page({
  data:{
    address:{},
    cart:[],
    allChecked:false,
    totalPrice:0,
    totalNum:0
  },
  onShow(){
    //获取缓存中的收货地址信息
    const address=wx.getStorageSync('address');
    //获取缓存中购物车的数据
    const cart=wx.getStorageSync('cart')||[];
    
    this.setData({address});
    this.setCart(cart);
  },
  async handleChooseAddress(){
    try{
    //获取权限状态
    const res1 = await wx.getSetting();
    const scopeAddress =res1.authSetting["scope.address"];
    //判断权限状态
    if(scopeAddress===false){
      await openSetting();
    }
    //调用获取收货地址的API
    const address = await chooseAddress();
    //存入缓存
    wx.setStorageSync('address', address);
    }catch(error){
      console.log(error);
    }
  },
  //商品的选中
  handeItemChange(e){
    //获取被修改的商品的ID
    const goods_id=e.currentTarget.dataset.id;
    //获取购物车数组
    let {cart}=this.data;
    //找到该商品对象
    let index=cart.findIndex(v=>v.goods_id===goods_id);
    //选中状态取反
    cart[index].checked=!cart[index].checked;
    
    this.setCart(cart);
  },
  //设置购物车的同时 重新计算 底部工具栏的数据 全选 总价格 总数量
  setCart(cart){
    let allChecked=true;
    //总价格 总数量
    let totalPrice=0;
    let totalNum=0;
    cart.forEach(v=>{
      if(v.checked){
        totalPrice+=v.num*v.goods_price;
        totalNum+=v.num;
      }else{
        allChecked=false;
      }
    })
    //判断数组是否为空
    allChecked=cart.length!=0?allChecked:false;
    //把 购物车数据重新设置data和缓存
    this.setData({
      cart,
      allChecked,
      totalNum,
      totalPrice
    });
    wx.setStorageSync('cart', cart);
  },
  //商品的全选功能
  handleItemAllCheck(){
    //获取data数据
    let {cart,allChecked}=this.data;
    //修改值
    allChecked=!allChecked;
    //循环修改cart数组的选中状态
    cart.forEach(v=>v.checked=allChecked);
    this.setCart(cart);
  },
  //商品数量的编辑功能
  async handleItemNumEdit(e){
    const {operation,id}=e.currentTarget.dataset;
    let {cart}=this.data;
    const index=cart.findIndex(v=>v.goods_id===id);
    //判断是否执行删除
    if(cart[index].num===1 && operation===-1){
      //弹窗提示
        const res=await showModal({content:"您是否要删除?"});
        if(res.confirm){
          cart.splice(index,1);
            this.setCart(cart);
        }
    }else{
      cart[index].num+=operation;
    this.setCart(cart);
    } 
  },
  //点击结算
  async handlePay(){
    const {address,totalNum}=this.data;
    if (!address.userName) {
      await showToast({title:"您还没有选择收货地址"});
      return;
    }
    if (totalNum===0) {
      await showToast({title:"您还没有选购商品"});
      return;
    }
    wx.navigateTo({
      url: '/pages/pay/index'
    });
  }
})